\section{Le patron}
\paragraph{}
Le patron MVC (Modèle - vue - contrôleur) est un modèle ayant pour but de séparer les différents composants d'une application afin de répondre aux besoins des applications interactives. Chacune de ces trois parties peut donc avoir sa propre architecture:\\
- le modèle qui contient les données manipulées par l'application\\
- la vue qui regroupe la présentation et l'interface utilisateur de l'application\\
- le contrôleur qui supervise l'utilisation des données, gère les évènements et leur synchronisation
\paragraph{}
Ce modèle d'application très courant est présent dans l'application Explorer3d.
\paragraph{}
Une question à étudier est donc : est - il possible de reprendre ce patron sous R lors du portage d'Explorer3d sur ce langage ?

\section{MVC pour R}
\subsection{Modele}
\paragraph{}
La partie Modele du patron MVC est généralement prévue pour des langages orientés objets. Les variables dans R, à moins d'être déclarées dans des fonctions, sont accessibles depuis tout point du programme. Il n'y a pour structurer les données que deux outils, les variables surchargées et les environnement, qui sont étudiés plus en détail dans une autre partie de ce rapport.
\paragraph{}
Il en découle qu'une partie Modèle serait difficilement implémentable puisque les données ne sont  par définition pas encapsulées dans R.

\subsection{Vue}
\paragraph{}
La partie Vue du patron MVC est restreinte aux fonctionnalités visuelles de l'application, qui seront donc exposées à l'utilisateur. RGL et RGtk2 étant deux outils visuels il semblerait que nous puissions réaliser cette aspect du patron. Néanmoins, là aussi l'absence d'outils englobant, comme des objets (classes, interfaces...), restreint les possibilités de mise en place de cette partie. Automatiser les scènes 3d et les visuels de RGtk2 sans qu'ils soient mélangés aux fonctionnalités de la partie Controleur s'avérerait un travail fastidieux.

\newpage
\subsection{Controleur}
\paragraph{}
La partie Evenements et Synchronisations de RGL et RGtk2 est comme les deux autres parties du modèle MVC, incompatible avec RGL et RGtk2. La plupart des évènements soulevés sont liés dès la création des objets et le changement de ces liens relève de manipulations du code effectuées à la volée. Ils alourdissent celui-ci, ce qui correspond difficilement à ce que nous pourrions appeler du code propre.

%a renommer
\subsection{Adaptation}
\paragraph{}
Après avoir étudié au cas par cas chacun des trois points composant le modèle MVC, il semble évident que R n'est pas un langage orienté pour implémenter ce patron de programmation. Même si les outils utilisés pourraient être orientés afin d'être conformes à ce patron, ce ne serait pas un effort pertinent et particulièrement fastidieux.

\paragraph{}
Nous avons donc fait le choix d'une architecture simplifiée, divisée en deux parties distinctes. Un partie gère l'interface graphique, en RGtk2 et une seconde gère la visualisation en 3 dimensions. Les données entre ces deux parties sont echangées par des systèmes de variables globales et d'environnements. Ces mécanismes sont expliqués plus en détail dans la section suivante. La partie contrôleur est elle en fait le système R dans sa globalité.
